Triggers SQL এর একটি শক্তিশালী ফিচার যা স্বয়ংক্রিয়ভাবে কিছু ক্রিয়া বা অপারেশন সম্পাদন করতে ব্যবহৃত হয় যখন কোনো নির্দিষ্ট ঘটনা (event) ঘটে। যেমন: একটি টেবিলের ডেটা পরিবর্তিত হলে (INSERT, UPDATE, DELETE) নির্দিষ্ট একটি অ্যাকশন বা কাস্টম কিউরি চালানো।
Complex Trigger Operations হল এমন ট্রিগার যা একাধিক অপারেশন বা লজিক্যাল কন্ডিশন প্রয়োগ করে, এবং এটি সাধারণত বিভিন্ন টেবিলের মধ্যে সমন্বয় সাধন করতে ব্যবহৃত হয়। Complex Trigger গুলি সাধারণত ব্যবসায়িক লজিক এবং ডেটাবেসের একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপনের জন্য গুরুত্বপূর্ণ।
Trigger Types (Trigger এর ধরণ)
- BEFORE Trigger: এই ট্রিগারটি ইনসার্ট, আপডেট অথবা ডিলিট অপারেশন সম্পাদন করার আগে কার্যকর হয়। এটি ডেটাবেসে পরিবর্তন করার আগে শর্ত যাচাই করতে সহায়তা করে।
- AFTER Trigger: এই ট্রিগারটি ইনসার্ট, আপডেট অথবা ডিলিট অপারেশন সম্পাদন করার পরে কার্যকর হয়। এটি মূলত ডেটাবেসে পরিবর্তন সম্পন্ন হওয়ার পরে অতিরিক্ত ক্রিয়াকলাপ বা যাচাই করতে ব্যবহৃত হয়।
- INSTEAD OF Trigger: এই ধরনের ট্রিগারটি সাধারণত VIEW তে ব্যবহৃত হয় এবং এটি কোনও পরিবর্তন বা ক্রিয়ার পরিবর্তে নিজেই কোনো অপারেশন সম্পাদন করে। উদাহরণস্বরূপ,
INSTEAD OF INSERTট্রিগারটি কাস্টম ইনসার্ট অপারেশন পরিচালনা করতে পারে।
Complex Trigger Operations এর উদাহরণ
ধরা যাক, আমাদের দুটি টেবিল আছে:
orders(অর্ডারের তথ্য)inventory(পণ্য স্টক সম্পর্কিত তথ্য)
আমরা একটি BEFORE INSERT ট্রিগার তৈরি করতে চাই, যা নিশ্চিত করবে যে পণ্যের স্টক পর্যাপ্ত আছে কিনা, অর্ডার দেওয়ার পূর্বে।
উদাহরণ: BEFORE INSERT Trigger - স্টক চেক
CREATE TRIGGER check_inventory_before_order
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
DECLARE stock_count INT;
-- স্টকের পরিমাণ খুঁজে বের করুন
SELECT stock INTO stock_count
FROM inventory
WHERE product_id = NEW.product_id;
-- যদি স্টক পর্যাপ্ত না হয়, তাহলে অ্যাকশন রিভার্ট করুন
IF stock_count < NEW.quantity THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insufficient stock for this order';
END IF;
END;
এই ট্রিগারটি:
- Before Insert অপারেশন চালানোর পূর্বে কার্যকর হবে।
inventoryটেবিল থেকে নির্দিষ্ট পণ্যের স্টক চেক করবে।- যদি স্টক পর্যাপ্ত না হয়, তাহলে অর্ডার গ্রহণ করবে না এবং একটি কাস্টম ত্রুটি (Error) সিগন্যাল পাঠাবে।
UPDATE Trigger Example: Tracking Changes Across Tables
ধরা যাক, আমাদের একটি employees টেবিল রয়েছে এবং আমরা চাই যে, কোনো কর্মীর বেতন পরিবর্তন হলে সেই পরিবর্তনকে একটি salary_history টেবিলে রেকর্ড করা হোক।
উদাহরণ: AFTER UPDATE Trigger - বেতন ইতিহাস রেকর্ড
CREATE TRIGGER log_salary_change
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
-- শুধুমাত্র বেতন পরিবর্তন হলে রেকর্ড করা হবে
IF OLD.salary != NEW.salary THEN
INSERT INTO salary_history (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.employee_id, OLD.salary, NEW.salary, NOW());
END IF;
END;
এই ট্রিগারটি:
- After Update অপারেশন পর সম্পাদিত হবে।
employeesটেবিলের বেতন পরিবর্তন হলেই, সেটিsalary_historyটেবিলে লগ হিসেবে রেকর্ড করবে।
Complex Operations in Triggers
Complex trigger operations সাধারণত একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয়। যেমন:
- Nested Queries: ট্রিগারে নেস্টেড কিউরি ব্যবহার করা যেতে পারে যাতে একাধিক টেবিল থেকে তথ্য যাচাই করা হয়।
- Multiple Table Updates: একটি ট্রিগার একাধিক টেবিল আপডেট করতে পারে, যেমন
AFTER INSERTবাAFTER UPDATEট্রিগার এর মাধ্যমে এক টেবিলের পরিবর্তন অন্য টেবিলের ডেটাকে প্রভাবিত করতে পারে। - Transaction Control: ট্রিগার এর মধ্যে COMMIT বা ROLLBACK ব্যবহার করে ডেটাবেসের ট্রানজেকশন কন্ট্রোল করা যায়। এতে নিশ্চিত করা যায় যে, একাধিক আপডেট অপারেশন একসাথে সফল হয়েছে।
Complex Trigger Examples
Example 1: Cascading Delete Trigger
ধরা যাক, orders এবং order_items টেবিল রয়েছে এবং আপনি চান যে, যদি একটি অর্ডার orders টেবিল থেকে মুছে ফেলা হয়, তবে সেই অর্ডারের আইটেমগুলোও order_items টেবিল থেকে স্বয়ংক্রিয়ভাবে মুছে যাক।
CREATE TRIGGER delete_order_items
AFTER DELETE ON orders
FOR EACH ROW
BEGIN
DELETE FROM order_items WHERE order_id = OLD.order_id;
END;
এই ট্রিগারটি:
- After Delete ঘটলে কার্যকর হবে।
ordersটেবিল থেকে কোনো অর্ডার মুছে ফেলা হলে তার সাথে সম্পর্কিত আইটেমগুলোorder_itemsটেবিল থেকেও মুছে ফেলা হবে।
Example 2: Maintaining Aggregate Data
ধরা যাক, আপনি চান যে, যখন নতুন অর্ডার orders টেবিলে যোগ হবে, তখন সেই অর্ডারের মোট পরিমাণ (total_amount) customer_stats টেবিলে আপডেট হবে।
CREATE TRIGGER update_customer_total
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customer_stats
SET total_spent = total_spent + NEW.amount
WHERE customer_id = NEW.customer_id;
END;
এই ট্রিগারটি:
- After Insert অপারেশন সম্পন্ন হওয়ার পরে
customer_statsটেবিলেরtotal_spentআপডেট করবে।
উপসংহার
Complex Trigger Operations SQL ডেটাবেসের শক্তিশালী ফিচার যা বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং ডেটা ইন্টেগ্রিটি নিশ্চিত করতে সাহায্য করে। এটি ট্রানজেকশন ম্যানেজমেন্ট, ডেটা অডিটিং, এবং ব্যবসায়িক নিয়মাবলী কার্যকর করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। তবে, ট্রিগার ব্যবহারের সময় সঠিক কনফিগারেশন এবং পরীক্ষা করা গুরুত্বপূর্ণ, কারণ এটি ডেটাবেসের কর্মক্ষমতা এবং স্কেলেবিলিটি প্রভাবিত করতে পারে।
Read more